home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-01
/
strlib.zip
/
_STR2PAT.C
< prev
next >
Wrap
Text File
|
1993-01-04
|
2KB
|
44 lines
/* File : _str2pat.c
Author : Richard A. O'Keefe.
Updated: 2 June 1984
Defines: _pat_lim, _pat_vec[], _str2pat()
Searching in this package is done by an algorithm due to R. Nigel
Hospool, described in Software Practice & Experience 1980, p505.
Elsewhere I have a version of it which does exact case or either
case match, word more or literal mode, forwards or backwards, and
will look for the Nth instance. For most applications that is too
much and a simple exact case forward search will do. Hospool's
algorithm is a simplification of the Boyer-Moore algorithm which
doesn't guarantee linear time, but in practice is very good indeed.
_str2pat(pat) builds a search table for the string pat. As usual in
this pacakge, if pat == NullS, the table is not changed and the last
search string is re-used. To support this, _str2pat returns the
actual search string.
*/
#include "strings.h"
#include "_str2pat.h"
int _pat_lim;
int _pat_vec[_AlphabetSize];
static _char_ *oldPat = "";
_char_ *_str2pat(pat)
register _char_ *pat;
{
register int L, i;
if (pat == NullS) pat = oldPat; else oldPat = pat;
for (L = 0; *pat++; L++) ;
for (i = _AlphabetSize; --i >= 0; _pat_vec[i] = L) ;
for (pat = oldPat, i = L; --i > 0; _pat_vec[*pat++] = i) ;
_pat_lim = --L;
return oldPat;
}